package com.cy;

import com.cy.pj.sys.service.realm.ShiroRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;

@EnableCaching //启动springboot工程中的内置缓存
@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class,args);
    }
    /* 配置realm对象（org.apache.shiro.realm.Realm）
    * @Bena注解描述方法时，表示方法的返回值要交给spring管理
    * **/
    @Bean
    public Realm realm() {
        return new ShiroRealm();
    }
    /**定义过滤规则（Shiro框架中提供了很多过滤器-Filter，它会对请求中的信息进行过滤，假如）
     * 这些请求需要认证才可以访问，则需要先登录认证，例如在一些订票系统中
     * */
    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        //过滤链对象的定义（这个过滤链中包含了很多内置过滤器）
        DefaultShiroFilterChainDefinition chainDefinition =
                new DefaultShiroFilterChainDefinition();
        //指定中的过滤规则,例如：
        //配置/menu/*开头的资源可以匿名访问,其中为shiro框架指定的匿名过滤器
        //chainDefinition.addPathDefinition("/menu/*","anon");
        //配置user/login/*开头的资源，可以匿名访问
        chainDefinition.addPathDefinition("/user/login/**","anon");
        //登出操作
        chainDefinition.addPathDefinition("/user/logout","logout");
        //所有的/**开头的资源都必须要经过认证，其中authc为shiro框架指定的认证过滤器
        chainDefinition.addPathDefinition("/**", "authc");


        return chainDefinition;
    }
}
